from api.base_api import Base_api
import requests
from api.utils import Utils


def api(fun):

    # 参考基础中的r06写法
    def wrapper(*args,**kwargs):
        
        base_api_obj:Base_api = args[0]
        #直接写通用的解法
        # 这样写的好处就是不用调用fun了，这样fun里面可以直接为空
        return base_api_obj.send_api(base_api_obj.steps['login_requests'])

    return wrapper


class Login(Base_api):


    def __init__(self):
        self.steps = self.load_api('api/login_steps.yaml')
        print(self.steps)
    
    def login_session(self,user,password):
        s = requests.Session()
        rs = s.post('http://127.0.0.1/api/mgr/signin',data={
            'username':user,
            'password':password
        })
        return (s,rs)
    
    
    # def login_requests(self,user,password):
    #     data = {
    #         'username':user,
    #         'password':password
    #     }
    #     print(f'在login_requests里面打印了：{data}')
    #     rs = requests.post('http://127.0.0.1/api/mgr/signin',data=data)
    #     return rs
 
    # 第一种形态 一般的api
    def login_requests(self,user='byhy',password='8888888'):
        data = {
            'username':user,
            'password':password
        }
        print(f'在login_requests里面打印了：{data}')
        rs = requests.post('http://127.0.0.1/api/mgr/signin',data=data)
        return rs
    
    # 第二种形态 api用了 步骤的数据驱动  这里还可以用装饰器来进行代码的简化
    def login_requests_api(self,user,password):
        # 这里涉及到对yaml里面的参数替换，要替换为入参的user和password
        # 有两种思路：第一种,把dict转变成字符串，re.sub（要写迭代），迭代思路见jichu r6，转换成字符串见jichu r8
        #           第二种，把dict转变成字符串(yaml.safe_dump)，string.Template对字符串进行占位符的替换
        #                   
                     

        #  下面： 这些也要封装成一个utils 直接可以调用
        #  第一步： 先判断有没有占位符，有就直接替换，没有直接发请求
        #  第二步： dict转变成
        steps = self.steps['login_requests']
        step_rep = Utils.string_replace(steps,username=user,password=password)
        return self.send_api(step_rep)
    
    # 第三种形态  终极形态：空架子
    @api
    def login_requests_api_1(self,user,password):
        pass